home *** CD-ROM | disk | FTP | other *** search
/ Motor Sport Digital Archive Collection 1960s / Motor Sport Digital Archive Collection 1960s.iso / main.swf / scripts / mx / controls / alertClasses / AlertForm.as
Encoding:
Text File  |  2008-05-21  |  9.9 KB  |  305 lines

  1. package mx.controls.alertClasses
  2. {
  3.    import flash.display.DisplayObject;
  4.    import flash.events.KeyboardEvent;
  5.    import flash.events.MouseEvent;
  6.    import flash.text.TextLineMetrics;
  7.    import flash.ui.Keyboard;
  8.    import mx.controls.Alert;
  9.    import mx.controls.Button;
  10.    import mx.core.UIComponent;
  11.    import mx.core.UITextField;
  12.    import mx.core.mx_internal;
  13.    import mx.events.CloseEvent;
  14.    import mx.managers.IFocusManagerContainer;
  15.    import mx.managers.ISystemManager;
  16.    import mx.managers.PopUpManager;
  17.    
  18.    use namespace mx_internal;
  19.    
  20.    public class AlertForm extends UIComponent
  21.    {
  22.       mx_internal static const VERSION:String = "2.0.1.0";
  23.       
  24.       private var icon:DisplayObject;
  25.       
  26.       private var textWidth:Number;
  27.       
  28.       private var textHeight:Number;
  29.       
  30.       mx_internal var defaultButton:Button;
  31.       
  32.       private var defaultButtonChanged:Boolean = false;
  33.       
  34.       mx_internal var buttons:Array;
  35.       
  36.       mx_internal var textField:UITextField;
  37.       
  38.       public function AlertForm()
  39.       {
  40.          mx_internal::buttons = [];
  41.          defaultButtonChanged = false;
  42.          super();
  43.          tabChildren = true;
  44.       }
  45.       
  46.       override protected function keyDownHandler(param1:KeyboardEvent) : void
  47.       {
  48.          var _loc2_:uint = 0;
  49.          _loc2_ = Alert(parent).buttonFlags;
  50.          if(param1.keyCode == Keyboard.ESCAPE)
  51.          {
  52.             if(Boolean(_loc2_ & Alert.CANCEL) || !(_loc2_ & Alert.NO))
  53.             {
  54.                removeAlert("CANCEL");
  55.             }
  56.             else if(_loc2_ & Alert.NO)
  57.             {
  58.                removeAlert("NO");
  59.             }
  60.          }
  61.       }
  62.       
  63.       private function clickHandler(param1:MouseEvent) : void
  64.       {
  65.          var _loc2_:String = null;
  66.          _loc2_ = Button(param1.currentTarget).name;
  67.          removeAlert(_loc2_);
  68.       }
  69.       
  70.       override protected function measure() : void
  71.       {
  72.          var _loc1_:String = null;
  73.          var _loc2_:TextLineMetrics = null;
  74.          var _loc3_:int = 0;
  75.          var _loc4_:Number = NaN;
  76.          var _loc5_:Number = NaN;
  77.          var _loc6_:Number = NaN;
  78.          var _loc7_:Number = NaN;
  79.          super.measure();
  80.          _loc1_ = Alert(parent).title;
  81.          _loc2_ = Alert(parent).mx_internal::getTitleTextField().getUITextFormat().measureText(_loc1_);
  82.          _loc3_ = Math.max(mx_internal::buttons.length,2);
  83.          _loc4_ = _loc3_ * mx_internal::buttons[0].width + (_loc3_ - 1) * 8;
  84.          _loc5_ = Math.max(_loc4_,_loc2_.width);
  85.          mx_internal::textField.width = 2 * _loc5_;
  86.          textWidth = mx_internal::textField.textWidth + UITextField.mx_internal::TEXT_WIDTH_PADDING;
  87.          _loc6_ = Math.max(_loc5_,textWidth);
  88.          _loc6_ = Math.min(_loc6_,2 * _loc5_);
  89.          if(textWidth < _loc6_ && mx_internal::textField.multiline == true)
  90.          {
  91.             mx_internal::textField.multiline = false;
  92.             mx_internal::textField.wordWrap = false;
  93.          }
  94.          else if(mx_internal::textField.multiline == false)
  95.          {
  96.             mx_internal::textField.wordWrap = true;
  97.             mx_internal::textField.multiline = true;
  98.          }
  99.          _loc6_ += 16;
  100.          if(icon)
  101.          {
  102.             _loc6_ += icon.width + 8;
  103.          }
  104.          textHeight = mx_internal::textField.textHeight + UITextField.mx_internal::TEXT_HEIGHT_PADDING;
  105.          _loc7_ = textHeight;
  106.          if(icon)
  107.          {
  108.             _loc7_ = Math.max(_loc7_,icon.height);
  109.          }
  110.          _loc7_ = Math.min(_loc7_,screen.height * 0.75);
  111.          _loc7_ = _loc7_ + (mx_internal::buttons[0].height + 3 * 8);
  112.          measuredWidth = _loc6_;
  113.          measuredHeight = _loc7_;
  114.       }
  115.       
  116.       override protected function commitProperties() : void
  117.       {
  118.          var _loc1_:ISystemManager = null;
  119.          super.commitProperties();
  120.          if(defaultButtonChanged && Boolean(mx_internal::defaultButton))
  121.          {
  122.             defaultButtonChanged = false;
  123.             Alert(parent).defaultButton = mx_internal::defaultButton;
  124.             if(parent is IFocusManagerContainer)
  125.             {
  126.                _loc1_ = Alert(parent).systemManager;
  127.                _loc1_.activate(IFocusManagerContainer(parent));
  128.             }
  129.             mx_internal::defaultButton.setFocus();
  130.          }
  131.       }
  132.       
  133.       override protected function createChildren() : void
  134.       {
  135.          var _loc1_:Class = null;
  136.          var _loc2_:uint = 0;
  137.          var _loc3_:uint = 0;
  138.          var _loc4_:Button = null;
  139.          super.createChildren();
  140.          if(!mx_internal::textField)
  141.          {
  142.             mx_internal::textField = new UITextField();
  143.             mx_internal::textField.styleName = this;
  144.             mx_internal::textField.text = Alert(parent).text;
  145.             mx_internal::textField.multiline = true;
  146.             mx_internal::textField.wordWrap = true;
  147.             mx_internal::textField.selectable = true;
  148.             addChild(mx_internal::textField);
  149.          }
  150.          _loc1_ = Alert(parent).iconClass;
  151.          if(Boolean(_loc1_) && !icon)
  152.          {
  153.             icon = new _loc1_();
  154.             addChild(icon);
  155.          }
  156.          _loc2_ = Alert(parent).buttonFlags;
  157.          _loc3_ = Alert(parent).defaultButtonFlag;
  158.          if(_loc2_ & Alert.OK)
  159.          {
  160.             _loc4_ = createButton(Alert.okLabel,"OK");
  161.             if(_loc3_ == Alert.OK)
  162.             {
  163.                mx_internal::defaultButton = _loc4_;
  164.             }
  165.          }
  166.          if(_loc2_ & Alert.YES)
  167.          {
  168.             _loc4_ = createButton(Alert.yesLabel,"YES");
  169.             if(_loc3_ == Alert.YES)
  170.             {
  171.                mx_internal::defaultButton = _loc4_;
  172.             }
  173.          }
  174.          if(_loc2_ & Alert.NO)
  175.          {
  176.             _loc4_ = createButton(Alert.noLabel,"NO");
  177.             if(_loc3_ == Alert.NO)
  178.             {
  179.                mx_internal::defaultButton = _loc4_;
  180.             }
  181.          }
  182.          if(_loc2_ & Alert.CANCEL)
  183.          {
  184.             _loc4_ = createButton(Alert.cancelLabel,"CANCEL");
  185.             if(_loc3_ == Alert.CANCEL)
  186.             {
  187.                mx_internal::defaultButton = _loc4_;
  188.             }
  189.          }
  190.          if(mx_internal::defaultButton)
  191.          {
  192.             defaultButtonChanged = true;
  193.             invalidateProperties();
  194.          }
  195.       }
  196.       
  197.       private function removeAlert(param1:String) : void
  198.       {
  199.          var _loc2_:Alert = null;
  200.          var _loc3_:CloseEvent = null;
  201.          _loc2_ = Alert(parent);
  202.          _loc2_.visible = false;
  203.          _loc3_ = new CloseEvent(CloseEvent.CLOSE);
  204.          if(param1 == "YES")
  205.          {
  206.             _loc3_.detail = Alert.YES;
  207.          }
  208.          else if(param1 == "NO")
  209.          {
  210.             _loc3_.detail = Alert.NO;
  211.          }
  212.          else if(param1 == "OK")
  213.          {
  214.             _loc3_.detail = Alert.OK;
  215.          }
  216.          else if(param1 == "CANCEL")
  217.          {
  218.             _loc3_.detail = Alert.CANCEL;
  219.          }
  220.          _loc2_.dispatchEvent(_loc3_);
  221.          PopUpManager.removePopUp(_loc2_);
  222.       }
  223.       
  224.       private function createButton(param1:String, param2:String) : Button
  225.       {
  226.          var _loc3_:Button = null;
  227.          var _loc4_:String = null;
  228.          _loc3_ = new Button();
  229.          _loc3_.label = param1;
  230.          _loc3_.name = param2;
  231.          _loc4_ = getStyle("buttonStyleName");
  232.          if(_loc4_)
  233.          {
  234.             _loc3_.styleName = _loc4_;
  235.          }
  236.          _loc3_.addEventListener(MouseEvent.CLICK,clickHandler);
  237.          _loc3_.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
  238.          _loc3_.owner = parent;
  239.          addChild(_loc3_);
  240.          _loc3_.setActualSize(Alert.buttonWidth,Alert.buttonHeight);
  241.          mx_internal::buttons.push(_loc3_);
  242.          return _loc3_;
  243.       }
  244.       
  245.       override public function styleChanged(param1:String) : void
  246.       {
  247.          var _loc2_:String = null;
  248.          var _loc3_:int = 0;
  249.          var _loc4_:int = 0;
  250.          super.styleChanged(param1);
  251.          if(!param1 || param1 == "styleName" || param1 == "buttonStyleName")
  252.          {
  253.             if(mx_internal::buttons)
  254.             {
  255.                _loc2_ = getStyle("buttonStyleName");
  256.                _loc3_ = int(mx_internal::buttons.length);
  257.                _loc4_ = 0;
  258.                while(_loc4_ < _loc3_)
  259.                {
  260.                   mx_internal::buttons[_loc4_].styleName = _loc2_;
  261.                   _loc4_++;
  262.                }
  263.             }
  264.          }
  265.       }
  266.       
  267.       override protected function updateDisplayList(param1:Number, param2:Number) : void
  268.       {
  269.          var _loc3_:Number = NaN;
  270.          var _loc4_:Number = NaN;
  271.          var _loc5_:Number = NaN;
  272.          var _loc6_:int = 0;
  273.          var _loc7_:Number = NaN;
  274.          super.updateDisplayList(param1,param2);
  275.          _loc4_ = param2 - mx_internal::buttons[0].height;
  276.          _loc5_ = mx_internal::buttons.length * (mx_internal::buttons[0].width + 8) - 8;
  277.          _loc3_ = (param1 - _loc5_) / 2;
  278.          _loc6_ = 0;
  279.          while(_loc6_ < mx_internal::buttons.length)
  280.          {
  281.             mx_internal::buttons[_loc6_].move(_loc3_,_loc4_);
  282.             mx_internal::buttons[_loc6_].tabIndex = _loc6_ + 1;
  283.             _loc3_ += mx_internal::buttons[_loc6_].width + 8;
  284.             _loc6_++;
  285.          }
  286.          _loc5_ = textWidth;
  287.          if(icon)
  288.          {
  289.             _loc5_ += icon.width + 8;
  290.          }
  291.          _loc3_ = (param1 - _loc5_) / 2;
  292.          if(icon)
  293.          {
  294.             icon.x = _loc3_;
  295.             icon.y = (_loc4_ - icon.height) / 2;
  296.             _loc3_ += icon.width + 8;
  297.          }
  298.          _loc7_ = mx_internal::textField.getExplicitOrMeasuredHeight();
  299.          mx_internal::textField.move(_loc3_,(_loc4_ - _loc7_) / 2);
  300.          mx_internal::textField.setActualSize(textWidth + 5,_loc7_);
  301.       }
  302.    }
  303. }
  304.  
  305.